/**
 *  Created by AZEMAT on 2017/12/11.
 *  function:map main controller js file .
 */


//获取GTL资源对象数组集
var shaparrG = new Array();
var shaparrT = new Array();
var shaparrL = new Array();

//调用GetShapeObjectArray方法的次数
var frequencyin = 0;
var frequencyout = 0;

//地图对象
var map = new Object();

//打开浏览器就加载地图
InitMap(10,[81.387223,43.912056]);

//初始化地图
function InitMap(zoom,canter) {
    var windowsArr = [];
    var marker = [];
    //创建map对象
    map = new AMap.Map('container',{
        resizeEnable: true,
        zoom: zoom,
        center: canter //81.268997	43.908329
    });
    //搜索功能
    AMap.plugin(['AMap.Autocomplete','AMap.PlaceSearch'],function(){
        var autoOptions = {
            city: "伊犁", //城市，默认全国
            input: "keyword"//使用联想输入的input的id
        };
        autocomplete= new AMap.Autocomplete(autoOptions);
        var placeSearch = new AMap.PlaceSearch({
            city:'伊犁',
            map:map
        })
        AMap.event.addListener(autocomplete, "select", function(e){
            //TODO 针对选中的poi实现自己的功能
            placeSearch.setCity(e.poi.adcode);
            placeSearch.search(e.poi.name)
        });
    });
}

//设置地图风格
map.setMapStyle('amap://styles/normal');

/*
 *   按顺序获取shape对象数组集
 */
function GetGTLShapeArray(){
    setTimeout(function () {
        if(frequencyout==0&&frequencyin==frequencyout){
            $('<div id="loadingTip">加载数据，请稍候...</div>').appendTo(document.body);
            shaparrG = MakeGShapeArray();
            $("#state").text("正在获取资源信息，此过程肯能会卡，请稍等...(33%)");
            GetGTLShapeArray();
        }else if(frequencyout==1&&frequencyin==frequencyout){
            shaparrT = MakeTShapeArray();
            $("#state").text("正在获取资源信息，此过程肯能会卡，请稍等...(66%)");
            GetGTLShapeArray();
        }else if(frequencyout==2&&frequencyin==frequencyout){
            shaparrL = MakeLShapeArray();
            $("#state").text("正在获取资源信息，此过程肯能会卡，请稍等...(99%)");
            setTimeout(function () {
                $("#loadcheckbox").show();
                $('#loadingTip').remove();
                $("#state").text("");
            },1000);
        }
    },1000);
}

/*
 *  生成2G基站形状对象数组
 */
function MakeGShapeArray() {
    return GetShapeObjectArray(
        "./kml/2g1.kml",
        {
            "strokeColor":"#ee2015", //线颜色
            "strokeOpacity":0.4, //线透明度
            "strokeWeight":1, //线粗细度
            "fillColor":"#afb3ee", //填充颜色
            "fillOpacity":0.2, //填充透明度
            "radius":10 //室分图层半径
        }
    );
}

/*
 *  生成3g基站形状对象数组
 */
function MakeTShapeArray() {
    return GetShapeObjectArray(
        "./kml/3g1.kml",
        {
            "strokeColor":"#1514fc", //线颜色
            "strokeOpacity":0.4, //线透明度
            "strokeWeight":2, //线粗细度
            "fillColor":"#fe9f00", //填充颜色
            "fillOpacity":0.35, //填充透明度
            "radius":10 //室分图层半径
        }
    );
}

/*
 *  生成4g基站形状对象数组
 */
function MakeLShapeArray() {
    return GetShapeObjectArray(
        "./kml/4g1.kml",
        {
            "strokeColor":"#fcff03", //线颜色
            "strokeOpacity":0.4, //线透明度
            "strokeWeight":2, //线粗细度
            "fillColor":"#25e1ee", //填充颜色
            "fillOpacity":0.35, //填充透明度
            "radius":10 //室分图层半径
        }
    );
}

/**
 *  获取形状对象
 *  url:kml文件路劲
 *  configure：形状样式
 */
function GetShapeObjectArray(url,configure) {
    ++frequencyin;
    //返回形状对象数组
    var returnress=new Array();
    //通过ajax方法解析文件内容
    $.ajax({
        type:"get",
        url:url,
        dataType:"xml",
        timeout:1000,
        cache:false,
        success:function(xml){
            //建立一个代码片段
            var frag = $("<Document/>");
            $(xml).find("Folder").each(function(i){

                //获取基站扇区名称(在description里有,无需重取)
                //var name = $(this).children("name").text();
                //获取中心经纬度
                var lal = $(this).children("Placemark").children("Point").children("coordinates").text();

                //获取经纬度组集
                var lals = $(this).children("Placemark").children("Polygon").children("outerBoundaryIs")
                    .children("LinearRing").children("coordinates").text();

                //获取其他信息
                var description = $(this).children("Placemark").children("description").text().toString();

                //把table字符串里面的值转换JSON数据,（实验：把这个功能放到对象事件的话可以省14.57秒，有23.54,没有8.97）
                //description = TableStringToJson(description);

                //通过ajax方法获取的字符串创建shape(形状)对象，并封装到数组里
                var ob = GetShapeObject(lal,lals,description,configure);
                returnress.push(ob);
            });
            frag.appendTo("#load");
        },
        complete:function (XHR, TS) {
            ++frequencyout;
        },
        error:function (e) {
            $("#state").text("生成基站对象出错，错误信息请看console!");
            console.log(e);
        }
    });
    return returnress;
}

/**
 *  获取基站形状对象
 *  lsl : 中心经纬度
 *  lsls : 扇图的坐标集（kml文件的coordinates标签内容）
 *  description：全部信息（除了lsls）
 *  configure：形状样式
 *  return：shape对象（形状对象）
 */
function GetShapeObject(lsl,lsls,description,configure) {
    var shape = new Object();
    /*
     *  开始画基站图形，先通过基站类型判断宏站还是室分，再画图不同形状
     *  目前暂时用汉字判断，建议后期更改，否则可能会出现中文乱码问题
     */
    if(description.indexOf("\<TD\>室分\</TD\>") >= 0){
        //圆形
        shape = new AMap.Circle({
            center: new AMap.LngLat((lsl.split(","))[0],(lsl.split(","))[1]),
            radius: configure['radius'], //半径
            strokeColor: configure['strokeColor'], //线颜色
            strokeOpacity: configure['strokeOpacity'], //线透明度
            strokeWeight: configure['strokeWeight'], //线粗细度
            fillColor: configure['fillColor'], //填充颜色
            fillOpacity: configure['fillOpacity'],//填充透明度
            extData:description
        });
    }else{
        //扇形
        //把字符串按,0 来分开
        var temp = lsls.split(",0 ");
        //多边形覆盖物节点坐标数组
        var polygonArr = new Array();
        for(var i=0;i<temp.length-1;i++){
            var tempin = temp[i].split(",");
            var jingdu = parseFloat(tempin[0]);
            var weidu = parseFloat(tempin[1]);
            polygonArr.push([jingdu,weidu]);
        }
        shape = new AMap.Polygon({
            path: polygonArr,//设置多边形边界路径
            strokeColor: configure['strokeColor'], //线颜色
            strokeOpacity: configure['strokeOpacity'], //线透明度
            strokeWeight: configure['strokeWeight'], //线粗细度
            fillColor: configure['fillColor'], //填充颜色
            fillOpacity: configure['fillOpacity'],//填充透明度
            extData:description
        });
        polygonArr=null;
    }
    //加载事件
    shape.on('click', function() {
        //实验：把这个功能放到对象事件的话可以省14.57秒，有23.54,没有8.97
        var res = shape.getExtData();
        var resjson = TableStringToJson(res);
        console.log(resjson);
        alert("小区名:"+resjson['小区名称']);
    });
    return shape;
}

/*
 *   获取table字符串里面的值
 *   str ：字符串格式的table数据
 *   return json
 */
function TableStringToJson(str) {
    var temtable = "<div id='temtable' style='display: none'></div>";
    $("body").append(temtable);
    $("#temtable").append(str);
    $("#temtable table").attr('id','temtable');
    var returnjson = TableStringToJsonTools("temtable");
    $("#temtable").remove();
    return returnjson;
}

/*
 *   把html的table转换json类型
 *   tableid : table的id
 *   return json
 */
function TableStringToJsonTools(tableid) {
    var txt = "{";
    $("#"+tableid).each(function(){
        var rownum = $(this).find("tr").length;
        for(var i = 0; i< rownum;i++){
            var key= $(this).find("tr").eq(i).find("td").eq(0).html();
            var data= $(this).find("tr").eq(i).find("td").eq(1).html();
            txt += "\"" + key + "\"\:\"" + data + "\",";
        }
        txt = txt.substring(0, txt.length - 1);
        txt += "}";
    });
    return $.parseJSON(txt);;
}

/**
 *  通过shape对象数组集，生成形状图层加载map对象
 */
function MakeShapeInMap(gtl) {
    if(gtl==234){
        var all = new Array();
        all = all.concat(shaparrG);
        all = all.concat(shaparrT);
        all = all.concat(shaparrL)
        map.add(all);
    }else if(gtl==2){
        map.add(shaparrG);
    }else if(gtl==3){
        map.add(shaparrT);
    }else if(gtl==4){
        map.add(shaparrL);
    }
}
